(function (w, d){ var OVERLAY=d.getElementById('dk-loading-overlay'); var TITLE_ID='dk-loading-title'; function showOverlay(message){ if(message){ var title=OVERLAY.querySelector('#' + TITLE_ID); if(title) title.textContent=message; } OVERLAY.style.display='flex'; d.body.style.overflow='hidden'; } function hideOverlay(){ if(!OVERLAY) return; OVERLAY.style.display='none'; d.body.style.overflow=''; } w.showOverlay=showOverlay; w.hideOverlay=hideOverlay; })(window, document); window.BWDK=window.BWDK||{}; window.BWDK.SUPPORT_CODES={ MISSING_ORDER_START_URL: 403, INVALID_ORDER_START_URL: 501, FRONTEND_FETCH_FAILED: 502, UNKNOWN: 999 }; window.BWDK.GENERIC_ERROR_MESSAGE='متاسفانه در حال حاضر امکان خرید با دیجیکالا در دسترس نمی‌باشد.'; window.BWDK.formatSupportMessage=function (supportCode, baseMessage){ var base=(baseMessage&&String(baseMessage).trim()) ? String(baseMessage).trim():window.BWDK.GENERIC_ERROR_MESSAGE; var code=parseInt(supportCode, 10); if(!code||isNaN(code)){ code=window.BWDK.SUPPORT_CODES.UNKNOWN; } if(/کد پیگیری:\s*\d+/u.test(base)){ return base; } return base + ' کد پیگیری: ' + code; }; window.BWDK.isValidOrderStartUrl=function (value){ if(!value||typeof value!=='string'){ return false; } try { var parsed=new URL(value); return parsed.protocol==='http:'||parsed.protocol==='https:'; } catch (e){ return false; }}; window.BWDK.showCheckoutError=function (message){ if(typeof hideOverlay==='function'){ hideOverlay(); } if(typeof jQuery!=='undefined'){ jQuery('#bwdk-error').html(message); jQuery('.wrap-bwdk-error , .dk-mask').fadeIn(); }}; window.BWDK.startDigifyCheckout=function (opts){ opts=opts||{}; if(window.BWDK._checkoutInFlight){ return; } window.BWDK._checkoutInFlight=true; function releaseCheckoutLock(){ window.BWDK._checkoutInFlight=false; } showOverlay(); var origin=opts.origin; if(!origin){ var pathname=window.location.pathname; origin='checkout'; if(pathname.indexOf('/checkout')!==-1){ origin='checkout'; }else if(pathname.indexOf('/cart')!==-1){ origin='cart'; }else{ if(typeof wc_add_to_cart_params!=='undefined'&&wc_add_to_cart_params.cart_url){ origin='cart'; }else{ origin='checkout'; }} } console.log('[BWDK] Origin determined:', origin, 'pathname:', window.location.pathname); function fetchAdminAjax(){ return fetch(bwdk_ajax.ajax_url, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: new URLSearchParams({ action: 'bwdk_get_cart', _ajax_nonce: bwdk_ajax.nonce, callback_url: window.location.href, bwdk_origin: origin }) }); } function fetchCartFromStoreAPI(){ var storeApiUrl=new URL('/wp-json/wc/store/cart', window.location.origin); return fetch(storeApiUrl, { method: 'GET', credentials: 'include', headers: { 'Accept': 'application/json' }}); } function resolveBackendErrorMessage(errorPayload, fallbackCode){ var data=errorPayload||{}; var nested=data.data||data; var message=nested.message||data.message||''; var supportCode=nested.support_code||data.support_code||fallbackCode||window.BWDK.SUPPORT_CODES.UNKNOWN; if(message){ return window.BWDK.formatSupportMessage(supportCode, message); } return window.BWDK.formatSupportMessage(supportCode); } function parseAjaxError(response, responseText){ var errorData=null; try { errorData=JSON.parse(responseText); } catch (e){ } return { ok: false, errorData: errorData, originalStatus: response.status };} function shouldRetryCreateAfterHttpError(response, errorData){ if(response.status===409){ return false; } var nested=(errorData&&(errorData.data||errorData))||{}; var code=nested.code||''; return code==='cart_invalid'; } function fetchCartWithFallback(){ return fetchAdminAjax().then(function(response){ if(response.ok){ return response.json().then(function(data){ return { ok: true, data: data };}); } if(response.status >=400){ return response.text().then(function(responseText){ var parsed=parseAjaxError(response, responseText); if(!shouldRetryCreateAfterHttpError(response, parsed.errorData)){ return parsed; } return fetchCartFromStoreAPI().then(function(storeApiResponse){ if(storeApiResponse.ok){ return fetchAdminAjax().then(function(retryResponse){ if(retryResponse.ok){ return retryResponse.json().then(function(data){ return { ok: true, data: data };}); } return parsed; }).catch(function(){ return parsed; }); } return parsed; }).catch(function(){ return parsed; }); }); } return response.text().then(function(responseText){ return parseAjaxError(response, responseText); }); }).catch(function(error){ return fetchCartFromStoreAPI().then(function(storeApiResponse){ if(storeApiResponse.ok){ return fetchAdminAjax().then(function(retryResponse){ if(retryResponse.ok){ return retryResponse.json().then(function(data){ return { ok: true, data: data };}); } return { ok: false, fetchError: true };}).catch(function(){ return { ok: false, fetchError: true };}); }else{ return { ok: false, fetchError: true };}}).catch(function(){ return { ok: false, fetchError: true };}); }); } fetchCartWithFallback().then(function(result){ console.log('[BWDK] fetchCartWithFallback result', result); if(result&&result.data){ console.log('[BWDK] ajax data', result.data); } window.__BWDK_LAST_AJAX__=result; if(result.ok&&result.data){ if(result.data.success){ var startUrl=(result.data.data&&result.data.data.order_start_url)||result.data.order_start_url; if(!startUrl){ console.error('[BWDK] Missing order_start_url:', { result: result, data: result.data, nestedData: result.data.data }); releaseCheckoutLock(); window.BWDK.showCheckoutError(window.BWDK.formatSupportMessage(window.BWDK.SUPPORT_CODES.MISSING_ORDER_START_URL) ); return; } if(!window.BWDK.isValidOrderStartUrl(startUrl)){ console.error('[BWDK] Invalid order_start_url:', { result: result, startUrl: startUrl, data: result.data, nestedData: result.data.data }); releaseCheckoutLock(); window.BWDK.showCheckoutError(window.BWDK.formatSupportMessage(window.BWDK.SUPPORT_CODES.INVALID_ORDER_START_URL) ); return; } window.location.href=startUrl; }else{ var errorMsg=resolveBackendErrorMessage(result.data, window.BWDK.SUPPORT_CODES.UNKNOWN); var errorData=result.data.data||result.data; var errorCode=errorData.code||''; releaseCheckoutLock(); window.BWDK.showCheckoutError(errorMsg); if((errorCode==='cart_invalid'||result.originalStatus===409)&&typeof jQuery!=='undefined'){ jQuery(document.body).trigger('update_checkout'); jQuery(document.body).trigger('wc_fragment_refresh'); }} }else if(result&&result.fetchError){ releaseCheckoutLock(); window.BWDK.showCheckoutError(window.BWDK.formatSupportMessage(window.BWDK.SUPPORT_CODES.FRONTEND_FETCH_FAILED) ); }else{ var msg=resolveBackendErrorMessage( result&&result.errorData ? result.errorData:null, window.BWDK.SUPPORT_CODES.UNKNOWN ); var nestedError=(result&&result.errorData&&(result.errorData.data||result.errorData))||{}; var nestedCode=nestedError.code||''; releaseCheckoutLock(); window.BWDK.showCheckoutError(msg); if((nestedCode==='cart_invalid'||(result&&result.originalStatus===409))&&typeof jQuery!=='undefined'){ jQuery(document.body).trigger('update_checkout'); jQuery(document.body).trigger('wc_fragment_refresh'); }} }).catch(function(error){ console.error('[BWDK] fetchCartWithFallback error:', error); releaseCheckoutLock(); window.BWDK.showCheckoutError(window.BWDK.formatSupportMessage(window.BWDK.SUPPORT_CODES.FRONTEND_FETCH_FAILED) ); }); }; document.addEventListener('click', function (e){ var host=null; var i; if(e.composedPath){ var path=e.composedPath(); for (i=0; i < path.length; i++){ var n=path[i]; if(n&&n.nodeType===1&&n.matches&&n.matches('digify-clickable-box[data-bwdk-context="cart-checkout"]')){ host=n; break; }} }else if(e.target&&e.target.closest){ host=e.target.closest('digify-clickable-box[data-bwdk-context="cart-checkout"]'); } if(!host){ return; } e.preventDefault(); if(typeof window.BWDK.startDigifyCheckout==='function'){ window.BWDK.startDigifyCheckout(); }}, true); jQuery(document).ready(function ($){ jQuery('.wrap-bwdk-error span , .dk-mask').on('click', function (){ jQuery('.wrap-bwdk-error , .dk-mask').fadeOut(); }); jQuery('.digikala-box-after-addToCart ,.digikala-box-before-header').on('click', function (){ jQuery('.digikala-modal-sp , .dk-mask').fadeIn(); }); jQuery('.digikala-modal-sp button, .close-modal-sp, .dk-mask').on('click', function (){ jQuery('.digikala-modal-sp , .dk-mask').fadeOut(); }); }); jQuery(document).ready(function (){ jQuery(document).off('click.bwdk', '.bwdk-button').on('click.bwdk', '.bwdk-button', function (e){ e.preventDefault(); window.BWDK.startDigifyCheckout(); }); }); jQuery(function ($){ var $box=$('.wrap-anim-text .anim-text'); var $items=$box.children('span'); if(!$box.length||$items.length < 2) return; var step=$items.first().outerHeight(); var dur=300; var wait=1000; var total=$items.length - 1; var i=0; $('.wrap-anim-text').css({overflow: 'hidden', height: step}); function tick(){ i++; $box.css({ transition: 'transform ' + dur + 'ms', transform: 'translateY(' + (-i * step) + 'px)' }); if(i===total){ setTimeout(function (){ $box.css({transition: 'none', transform: 'translateY(0px)'}); i=0; }, dur + 20); } setTimeout(tick, dur + wait); } tick(); }); jQuery(function ($){ var $wrap=$('.pdp-anim-text'); var $box=$wrap.find('.anim-text'); var $items=$box.children('span'); if(!$wrap.length||!$box.length||$items.length < 2) return; if($items.last().text().trim()!==$items.first().text().trim()){ $box.append($items.first().clone()); $items=$box.children('span'); } var step=Math.round($wrap.height())||$items.first().outerHeight(); var dur=300; var wait=1000; var total=$items.length - 1; var i=0; $wrap.css({overflow: 'hidden', height: step}); $box.css({willChange: 'transform'}); function tick(){ i++; $box.css({ transition: 'transform ' + dur + 'ms', transform: 'translateY(' + (-i * step) + 'px)' }); if(i===total){ setTimeout(function (){ $box.css({transition: 'none', transform: 'translateY(0px)'}); i=0; }, dur + 20); } setTimeout(tick, dur + wait); } tick(); }); jQuery(document.body).on('wc_fragments_loaded', function(){ var wrap=jQuery('.wrap-anim-text-addToCart-pop'); var box=jQuery('#anim-text'); var items=box.children('span'); if(!wrap.length||!box.length||items.length < 2) return; if(items.last().text().trim()!==items.first().text().trim()){ box.append(items.first().clone()); items=box.children('span'); } var step=Math.round(wrap.height())||items.first().outerHeight(); var dur=300; var wait=1000; var total=items.length - 1; var i=0; wrap.css({overflow: 'hidden', height: step}); box.css({willChange: 'transform'}); function tick(){ i++; box.css({ transition: 'transform ' + dur + 'ms', transform: 'translateY(' + (-i * step) + 'px)' }); if(i===total){ setTimeout(function (){ box.css({transition: 'none', transform: 'translateY(0px)'}); i=0; }, dur + 20); } setTimeout(tick, dur + wait); } tick(); }); jQuery(function ($){ function activateBox(){ var $box=$('.digikala-box-before-ct'); if(!$box.length) return; $box.removeClass('active'); setTimeout(function (){ $box.addClass('active'); }, 10); } setTimeout(activateBox, 1000); $(document.body).on('updated_wc_div updated_cart_totals cart_totals_refreshed wc_fragments_loaded wc_fragments_refreshed removed_from_cart added_to_cart', function ($){ setTimeout(activateBox, 100); } ); var observer=new MutationObserver(function (mutations){ for (var i=0; i < mutations.length; i++){ var m=mutations[i]; if($(m.addedNodes).find('.digikala-box-before-ct').length){ setTimeout(activateBox, 50); break; }} }); observer.observe(document.body, { childList: true, subtree: true }); }); jQuery(function ($){ function removeEmptyTags(){ $('.dk-content-before-ct').each(function(){ var $container=$(this); $container.find('p:empty').remove(); $container.find('p').filter(function(){ return $(this).text().trim()===''&&$(this).children().length===0; }).remove(); $container.find('br').each(function(){ var $br=$(this); var $parent=$br.parent(); var prevText=$br[0].previousSibling; var nextText=$br[0].nextSibling; var hasPrevContent=prevText&&prevText.nodeType===3&&prevText.textContent.trim()!==''; var hasNextContent=nextText&&nextText.nodeType===3&&nextText.textContent.trim()!==''; if(!hasPrevContent&&!hasNextContent){ var parentText=$parent.text().trim(); if(parentText===''||($parent.children().length===1&&$parent.children().is('br'))){ $br.remove(); }} }); $container.find('a.bwdk-button').each(function(){ var $btn=$(this); var hasContent=$btn.text().trim()!==''||$btn.children().length > 0; if(!hasContent){ $btn.remove(); }}); }); } removeEmptyTags(); $(document.body).on('updated_wc_div updated_cart_totals cart_totals_refreshed wc_fragments_loaded wc_fragments_refreshed', function(){ setTimeout(removeEmptyTags, 100); }); var hotfixObserver=new MutationObserver(function(mutations){ var shouldClean=false; for (var i=0; i < mutations.length; i++){ var m=mutations[i]; if(m.addedNodes.length > 0){ for (var j=0; j < m.addedNodes.length; j++){ var node=m.addedNodes[j]; if(node.nodeType===1){ if($(node).hasClass('dk-content-before-ct')||$(node).find('.dk-content-before-ct').length > 0){ shouldClean=true; break; }} }} if(shouldClean) break; } if(shouldClean){ setTimeout(removeEmptyTags, 50); }}); hotfixObserver.observe(document.body, { childList: true, subtree: true }); }); jQuery(function ($){ var COOKIE='bwdk_error'; function getCookie(name){ var m=document.cookie.match(new RegExp('(?:^|;)' + name.replace(/([.$?*|{}()\[\]\\\/\+^])/g,'\\$1') + '=([^;]*)')); return m ? m[1]:null; } function eraseCookieAllScopes(name){ var host=location.hostname; var domains=['', host, '.' + host]; if(host.indexOf('www.')===0){ var noWWW=host.replace(/^www\./, ''); domains.push(noWWW, '.' + noWWW); } domains.push(host); var paths=['/']; var parts=location.pathname.split('/').filter(Boolean); var cur=''; for (var i=0; i < parts.length; i++){ cur +='/' + parts[i]; paths.push(cur); } var base='; expires=Thu, 01 Jan 1970 00:00:00 GMT; Max-Age=0'; $.each(domains, function (_, d){ $.each(paths, function (_, p){ document.cookie=name + '=' + base + '; path=/'+ (d ? '; domain=' + d:''); }); }); } var raw=getCookie(COOKIE); if(!raw) return; try { raw=decodeURIComponent(raw.replace(/\+/g, ' ')); } catch (e){} $('#bwdk-error') .html(raw||'خطای ناشناخته'); $('.wrap-bwdk-error , .dk-mask').fadeIn(); eraseCookieAllScopes(COOKIE); }); (function($){ $(function(){ if(window.localStorage&&localStorage.getItem('bwdk_single_tip_closed')==='1'){ return; } var $btn=$('.bwdk-single-buy-button').first(); if(!$btn.length) return; var $form=$('#bwdk-single-buy-form'); if(!$form.length) return; if($('.bwdk-single-tip').length) return; var logoUrl=''; var $btnImg=$btn.find('img.logo-digi'); if($btnImg.length){ var btnImgSrc=$btnImg.attr('src'); logoUrl=btnImgSrc.replace('digiLogo.svg', 'digiLogoRed.svg'); }else{ var pluginPath=window.location.pathname.match(/\/wp-content\/plugins\/[^\/]+/); if(pluginPath){ logoUrl=pluginPath[0] + '/assets/public/img/digiLogoRed.svg'; }} var tipImgHtml=logoUrl ? 'digikala':''; var $tip=$( '
' + '
' + '
' + '' + tipImgHtml + 'خرید با دیجی‌کالا' + '' + '' + '
' + '

می‌توانید محصول موردنظر خود را بدون طی مراحل سبد خرید، به‌سرعت و با حساب دیجی‌کالایتان سفارش دهید

' + '' + '
' + '
' ); var $mask=$('
'); $tip.hide().appendTo($form); $mask.hide().appendTo('body'); setTimeout(function(){ $tip.fadeIn(200); }, 1000); function closeTip(){ if(window.localStorage){ localStorage.setItem('bwdk_single_tip_closed', '1'); } $tip.fadeOut(200, function(){ $(this).remove(); }); $mask.fadeOut(200, function(){ $(this).remove(); }); } $tip.on('click', '.bwdk-single-tip-close, .bwdk-single-tip-ok', closeTip); }); })(jQuery);